package kuonjisai;

public class J01_Fundamentals {

	// 유니코드 unicode
	// 전통적으로 영어권 나라들은 알파벳을 표기하기
	// 위해 ASCII 문자집합을 사용
	// ASCII 문자집합에서 각 문자는 7비트를 사용하고
	// 총 128개의 문자를 나타낼 수 있음
	
	// 유럽권 문자 표기를 위해 확장 ASCII 문자집합 사용
	// 추가적으로 128개의 문자를 정의 (총  256문자)
	
	// 하지만, 모든 국가들이 라틴 문자를 사용하지 않음
	// 동양 문화권에 속한 나라들은 다른 문자집합을 사용함
	// 게다가 8 비트로 수 천 개의 문자를 나타내기에는 무리가 있음
	
	// 한편, 한국에서 사용하는 문자집합 중 EUC-KR 은 
	// 8비트 한글 완성형 문자 인코딩, ISO-2022-KR 이라고도 불림 
	// 사용빈도가 높은 2350자만을 채택
	
	// 기존의 부족했던 완성형 한글을 보안하기 위해
	// 윈도 95부터 CP949 (=MS949) 라는 문자 인코딩을 
	// 확장 완성형이라는 명칭으로 도입
	// KS C 5601-1987 라고 불리기도 함
	// 현대의 모든 한글을 수용하게 됨 (8822자 추가)
	
	// 유니코드unicode는 유니코드 컨소시움이라는
	// 비영리 단체에 의해 개발된 문자집합
	// 전 세계 언어의 문자를 하나의 문자 집합에 포함하려 함
	// 유니코드에 있는 고유 번호로 정확히 한 문자를 표시
	
	// UTF-8
	// 바이트 가변길이 인코딩으로 유니코드 문자를 나타냄
	// 즉, 영어는 1바이트, 한글은 3바이트를 이용함 
	// 대부분의 브라우저도 UTF-8 인코딩을 지원함

	
	public static void main(String[] args) {
				// OOP 프로그램을 개발할때
				// 현실세계와 같은 객체 모델을 만들어야 함(class로 만듬)
				// 예를 들어 급여 프로그램은
				// 직원, 세금, 회사 객체등이 있어야 함
				
				// 하지만, 자바에서 객체는 유일한 데이터 형이 아님
				// => 기본(원시) 자료형
				// 자바에서 기본 자료형은 모두 8가지가 있음
				
				// 처음 6개의 기본 자료형은 숫자를 나타냄
				// 기본정수 : byte, short, int, long, 실수 : float, double
				// 문자형 : char(유니코드) 논리형 : boolean(true, false)
				
				// 자연수, 정수 : byte, short, int, long
				// 소수점이 있는 정수 : float, double
				
				// char : 단일 문자 저장시 사용
				// boolean : 논리값 (참/거짓) 저장시 사용
				
				// 프로그램 작성시 사용하려는
				// 자료의 크기에 따라 자료형을 적절히 선택
				
				// 변수 varable
				// 데이터가 저장될 장소를 의미
				// 자바는 엄격하게 자료형을 검사하는 언어임
				// 따라서, 모든 변수는 자료형이 선언되어야 함
				// 각각의 변수를 구분하기 위해 변수를 부여
				// 이것을 변수명 , 식별자identifier라 함
				
				// 변수 명명법
				// 1. 식별자는 자바 문자와 자바 숫자로만 구성
				//    길이는 무제한, 단 식별자의 첫 글자는 문자 이어야 함
				// 2. 식별자는 자바의 예약어, boolean 리터럴, 
				//    null 리터럴이면 안됨 (true/false/null 사용불가)
				// 3. 식별자는 특정 범위scope 내에서 유일해야함
				//    (중복 불가)
				// 4. 식별자는 대/소문자를 구분함 (x2, X2는 서로 다름)
				
				// 자바 문자/자바 숫자
				// 자바문자는 ASCII 문자문잡의 소/대 영문자,
				// 달러$ 문자와 밑줄_ 문자를 의미
				// 자바 숫자는 ASCII 문자집합의 숫자 0 - 9를 의미
				
				// 리터럴literal
				// 가끔 프로그램상에서 변수에 값을 할당할 때가 있음
				// 예를 들어, int에 숫자 2나 char에 문자 'a' 처럼
				// 변수에 값을 할당할 때, 이 값은 컴파일러가 
				// 이해할 수 있는 형식으로 표현해야 함
				
				// 소스코드 상의 값 표현법을 리터럴이라 함
				// 종류는 기본자료형(정수/실수/문자/논리값) 리터럴, 
				// 문자열String 리터럴, 널null 문자 리터럴
					
				
							    // 변수 선언 및 값 할당
						// [자료형] [변수명] = [리터럴];
						short birthyear = 1982;
						
						long jumin = 9107028888888L;                
						// 정수 리터럴(l)을 의미하는 접미사는
						// 대문자로 표기하는 것이 가독성이 좋음
						
						float pi = 3.14F; 
						// 실수 리터럴(f)을 의미하는 접미사는
						// 대문자로 표기하는 것이 가독성이 좋음
						
						char _1st_name = '김', _2nd_name = '혜',
								_3rd_name = '수', grade = '가';
									
						boolean isMale = true, isMarried = false;
						   // 동일한 자료형을 가지는 변수는
						   // , 를 이용해서 다중 변수 선언이 가능
						   // 하지만, 가독성이 떨어지기 때문에 비추!
						
						char code1 = '\uC790';		// 유니코드	 
						char code2 = '\uBC14';			 
						char symber1 = '\u263A';			 
						char symber2 = '\u2639';			 
						
						
						
						
						
						// 변수 값 출력
			            // 자바 표준 출력문 System.out.println() 사용
						// System.out.println( 변수명 );
						System.out.println( code1 );
						System.out.println( code2 );
						System.out.println( symber1 ); 
						System.out.println( symber2 ); 
	}

}
